package com.LeetCode.dp.shares;

/**
 * 股票 包含 手续费
 */
public class sharesWithServiceCharge {
    public int maxProfit(int[] prices, int fee) {
        int len = prices.length;
        if(len == 0) return 0;

        //第 i 天 , 是否持有
        int[][] dp = new int[len][2];

        dp[0][0] = 0;
        dp[0][1] = -prices[0];

        for(int i = 1; i<len; i++){
            dp[i][0] = Math.max(dp[i-1][0] , dp[i-1][1] + prices[i] - fee);
            dp[i][1] = Math.max(dp[i-1][1] , dp[i-1][0] - prices[i]);
        }
        return dp[len - 1][0];
    }

    /**
     * 优化空间开销
     */
    public int maxProfit_one_Dimension(int[] prices, int fee) {
        int len = prices.length;
        if(len == 0) return 0;

        //第 i 天 , 是否持有
        int[] dp = new int[2];

        dp[0] = 0;
        dp[1] = -prices[0];

        for(int i = 1; i<len; i++){
            dp[0] = Math.max(dp[0] , dp[1] + prices[i] - fee);
            dp[1] = Math.max(dp[1] , dp[0] - prices[i]);
        }
        return dp[0];
    }
}
